package rs.creator;

import java.util.ArrayList;
import java.util.List;

import rs.thread.MultiThreadWorker;
import rs.thread.processor.UserProcessor;
import rs.util.Requester;
import rs.util.TuningParameters;

/* Classe responsabile di creare il grafo delle amicizie (rappresentato tramite una lista). 
 * Partendo dall'utente iniziale si recuperano i suoi amici, poi gli amici degli amici e così via.
 * Il task in questione prevede l'uso di più thread. */
public class UserListCreator {

	public List<String> create(Requester app, String user) {
		List<String> users = new ArrayList<String>();
		users.add(user);
		
		List<String> input = new ArrayList<String>();
		input.add(user);
		
		for (int i = 0; i < TuningParameters.SOCIAL_DEPTH; i++) {
			UserProcessor up = new UserProcessor();
			MultiThreadWorker<String> mtw = new MultiThreadWorker<String>();
			mtw.compute(up, input);
			List<String> output =  up.getResult();
			
			for (String u : output) {
				if (!users.contains(u)) {
					users.add(u);
				}
			}
			
			input = output;
		}
		
		return users;
	}
	
}